home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 9 / The PC-SIG Library on CD ROM - Ninth Edition.iso / 501_600 / DISK0579 / DISK0579.ZIP / CHAP06.TXT < prev    next >
Text File  |  1989-12-01  |  19KB  |  414 lines

  1.  
  2.  
  3.  
  4.                                                     Chapter 6
  5.                          ARRAYS, TYPES, CONSTANTS, AND LABELS
  6.  
  7.  
  8. ARRAYS
  9. ____________________________________________________________
  10.  
  11. At the beginning of this tutorial we said that a computer
  12. program is composed of data and executable statements to do
  13. something with that data.  Having covered nearly all of the
  14. programming statements, we must now go back and fill in some
  15. gaps in our data definition and look at the array in
  16. particular.
  17.  
  18. One of the most useful Pascal data           ================
  19. structures is the array, which is, in the       ARRAYS.PAS
  20. simplest terms, a group of 2 or more         ================
  21. identical terms, all having the same type. 
  22. Let's go directly to an example to see
  23. what an array looks like. Display the Pascal program
  24. ARRAYS.PAS and notice line 5 starting with the word
  25. Automobiles.  The variable Automobiles is defined as an
  26. integer variable but in addition, it is defined to have twelve
  27. different integer variables, namely Automobile[1],
  28. Automobile[2], Automobile[3], .. Automobile[12].  
  29.  
  30. The square braces are used in Pascal to denote a subscript for
  31. an array variable.  The array definition given in line 5 is
  32. the standard definition for an array, namely a variable name,
  33. followed by a colon and the reserved word array, with the
  34. range of the array given in square brackets followed by
  35. another reserved word of and finally the type of variable for
  36. each element of the array.
  37.  
  38.  
  39. USING THE ARRAY
  40. ____________________________________________________________
  41.  
  42. In using the elements of the array in a program, each of the
  43. elements of the array are required to be used in exactly the
  44. same manner as any simple variable having the same type.  Each
  45. time one of the variables is used, it must have the subscript
  46. since the subscript is now part of the variable name.  The
  47. subscript moreover, must be of the type used in the definition
  48. and it must be within the range defined or it will be
  49. construed as an error.
  50.  
  51. Now consider the program itself.  As Index is varied from 1
  52. to 12, the range of the subscripts of the variable Automobile,
  53. the 12 variables are set to the series of values 11 to 22. 
  54. Any integer values could be used, this was only a convenient
  55. way to set the values to some well defined numbers.  With the
  56. values stored, a header is now printed and the list of values
  57. contained in the array is printed.  Note carefully that,
  58.  
  59.                                                      Page 6-1
  60.  
  61.                          Arrays, Types, Constants, and Labels
  62.  
  63. although the subscripts are limited to 1 through 12, the
  64. values stored in each of the 12 variables are limited only by
  65. the range of integers, namely -32768 to 32767.  Review this
  66. material and this program as long as needed to fully
  67. understand it, as it is very important.
  68.  
  69. Keep in mind that the array is actually composed of 12
  70. different integer type variables that can be used in any way
  71. that it is legal to use any other integer type variable. 
  72. Compile and run this program.
  73.  
  74.  
  75.  
  76. DOUBLY INDEXED ARRAYS
  77. ____________________________________________________________
  78.  
  79. After understanding the above example       =================
  80. program, load the program ARRAYS2.PAS to       ARRAYS2.PAS
  81. see the next level of complexity of         =================
  82. arrays.  You will see that Checkerboard is
  83. defined as an array from 1 to 8, but
  84. instead of it being a simple data type, it is itself another
  85. array from 1 to 8 of type integer.  The variable Checkerboard
  86. is actually composed of 8 elements, each of which is 8
  87. elements, leading to a total of 64 elements, each of which is
  88. a simple integer variable.  This is called a doubly
  89. subscripted array and it can be envisioned in exactly the same
  90. manner as a real checker board, an 8 by 8 matrix.  Another way
  91. to achieve the same end is to define the double array as in
  92. the next line of the program where Value is defined as a total
  93. of 64 elements.
  94.  
  95. To use either of the two variables in a program, we must add
  96. two subscripts to the variable name to tell the program which
  97. element of the 64 we desire to use.  Examining the program
  98. will reveal two loops, one nested within the other, and both
  99. ranging in value from 1 to 8.  The two loop indices can
  100. therefore be used as subscripts of the defined array
  101. variables.  The variable Checkerboard is subscripted by both
  102. of the loop indices and each of the 64 variables is assigned
  103. a value as a function of the indices.  The assigned value has
  104. no real meaning other than to illustrate to you how it is
  105. done.  Since the value of Checkerboard is now available, it
  106. is used to define some values to be used for the variable
  107. Value in line 12 of the program.
  108.  
  109. After defining all of those variables, and you should
  110. understand that we have defined a total of 128 variables in
  111. the double loop, 64 of Checkerboard and 64 of Value, they can
  112. be printed out.  The next section of the program does just
  113. that, by using another doubly nested loop, with a Write
  114. statement in the center.  Each time we go through the center
  115. of the loop we tell it to print out one of the 64 variables
  116. in the Checkerboard matrix with the indices Index and Count
  117.  
  118.                                                      Page 6-2
  119.  
  120.                          Arrays, Types, Constants, and Labels
  121.  
  122. defining which of the variables to write each time.  Careful
  123. study of the loop should reveal its exact operation.
  124.  
  125. After printing out the matrix defined by the variable
  126. Checkerboard we still have the matrix defined by the variable
  127. Value intact (In fact, we still have all of Checkerboard
  128. available because we haven't changed any of it).  Before
  129. printing out the matrix defined by Value, let's change a few
  130. of the elements just to see how it is done.  The code in lines
  131. 24 to 26 simply change three of the variables to illustrate
  132. that you can operate on all of the matrix in loops, or on any
  133. part of the matrix in simple assignment statements.  Notice
  134. especially line 26, in which Value[3,6] (which was just set
  135. to the value of 3), is used as a subscript.  This is perfectly
  136. legal since it is defined as a simple integer variable and is
  137. within the range of 1 to 8, which is the requirement for a
  138. subscript of the variable Value.  The last part of the program
  139. simply prints out the 64 values of the variable Value  in the
  140. same manner as above.  Notice that when you run the program,
  141. the three values are in fact changed as expected.
  142.  
  143.  
  144. ARRAYS ARE FLEXIBLE
  145. ____________________________________________________________
  146.  
  147. A few more words about arrays before we go on.  The arrays in
  148. the last program were both defined to be square, namely 8 by
  149. 8, but that choice was purely arbitrary.  The subscripts were
  150. chosen to go from 1 to 8 but they could have been chosen to
  151. go from 101 to 108 or any other range needed to clearly define
  152. the problem at hand.  And, as you may have guessed, you are
  153. not limited to a doubly subscripted matrix but you can define
  154. a variable with as many subscripts as you need to achieve your
  155. desired end.  There is a practical limit to the number of
  156. subscripts because you can very quickly use up all of your
  157. available memory with one large subscripted variable.
  158.  
  159.  
  160. THE TYPE DEFINITION
  161. ____________________________________________________________
  162.  
  163. Now that you understand arrays, lets look   =================
  164. at a more convenient way to define them by      TYPES.PAS
  165. examining the Pascal file TYPES.PAS.  You   =================
  166. will notice a new section at the beginning
  167. of the listing which begins with the word
  168. type.  The word type is another reserved word which is used
  169. at the beginning of a section to define "user-defined types". 
  170. Beginning with the simple predefined types we studied earlier,
  171. we can build up as many new types as we need and they can be
  172. as complex as we desire.  The six names (from Array_Def to
  173. Boat) in the type section are not variables, but are defined
  174. to be types and can be used in the same manner as we use
  175. integer, byte, real, etc.
  176.  
  177.                                                      Page 6-3
  178.  
  179.                          Arrays, Types, Constants, and Labels
  180.  
  181.  
  182. PASCAL CHECKS TYPES VERY CAREFULLY
  183. ____________________________________________________________
  184.  
  185. This is a very difficult concept, but a very important one. 
  186. The Pascal compiler is very picky about the types you use for
  187. variables in the program, doing lots of checking to insure
  188. that you do not use the wrong type anywhere in the program. 
  189. Because it is picky, you could do very little without the
  190. ability to define new types when needed, and that is the
  191. reason Pascal gives you the ability to define new types to
  192. solve a particular problem.
  193.  
  194. Some of these types are used in the var declaration part of
  195. the program.  Notice that since Airplane is an array of
  196. Dog_Food and Dog_Food is in turn an array of boolean, then
  197. Airplane defines a doubly subscripted array, each element
  198. being a boolean variable.  This does not define any variables,
  199. only a user defined type, which can be used in a var to define
  200. a matrix of boolean variables.  This is in fact done in the
  201. definition of Puppies, which is an array composed of 72 (6
  202. times 12) boolean variables.  In the same manner, Stuff is
  203. composed of an array of 14 variables, each being an integer
  204. variable.  The elements of the array are, Stuff[12],
  205. Stuff[13], .. Stuff[25].  Notice also that Stuff2 is also
  206. defined in exactly the same manner and is also composed of 14
  207. variables.
  208.  
  209. Careful inspection will reveal that Kitties is a variable
  210. which has the same definition as Puppies.  It would probably
  211. be poor programming practice to define them in different
  212. manners unless they were in fact totally disassociated.  In
  213. this example program, it serves to illustrate some of the ways
  214. user-defined types can be defined.  Be sure to compile and run
  215. this program.
  216.  
  217.  
  218. IS THE CONCEPT OF "TYPES" IMPORTANT?
  219. ____________________________________________________________
  220.  
  221. If you spend the time to carefully select the types for the
  222. variables used in the program, the Pascal compiler will do
  223. some debugging for you since it is picky about the use of
  224. variables with different types.  Any aid you can use to help
  225. find and remove errors from your program is useful and you
  226. should learn to take advantage of type checking.  The type
  227. checking in Pascal is relatively weak compared to some other
  228. languages such as Modula-2 or Ada, but still very useful.
  229.  
  230. In a tiny program like this example, the value of the type
  231. declaration part cannot be appreciated, but in a large program
  232. with many variables, the type declaration can be used to great
  233. advantage.  This will be illustrated later.
  234.  
  235.  
  236.                                                      Page 6-4
  237.  
  238.                          Arrays, Types, Constants, and Labels
  239.  
  240.  
  241. THE CONSTANT DECLARATION
  242. ____________________________________________________________
  243.  
  244. Examining the Pascal example program         ================
  245. CONSTANT.PAS will give us an example of a      CONSTANT.PAS
  246. constant definition.  The reserved word      ================
  247. const is the beginning of the section that
  248. is used to define constants that can be
  249. used anyplace in the program as long as they are consistent
  250. with the required data typing limitations.  In this example,
  251. Max_Size is defined as a constant with the value of 12.  This
  252. is not a variable and cannot be changed in the program, but
  253. is still a very valuable number.  For the moment ignore the
  254. next two constant definitions.  As we inspect the type
  255. declarations, we see two user-defined types, both of which are
  256. arrays of size 1 to 12 since Max_Size is defined as 12.  Then
  257. when we get to the var declaration part, we find five
  258. different variables, all defined as arrays from 1 to 12 (some
  259. are type integer and some are type char).  When we come to the
  260. program we find that it is one big loop which we go through
  261. 12 times because the loop is executed Max_Size times.
  262.  
  263. In the above definition, there seems to be no advantage to
  264. using the constant, and there is none, until you find that for
  265. some reason you wish to increase the range of all arrays from
  266. 12 to 18.  In order to do so, you only need to redefine the
  267. value of the constant, recompile, and the whole job is done. 
  268. Without the constant definition, you would have had to change
  269. all type declarations and the upper limit of the loop in the
  270. program.  Of course that would not be too bad in the small
  271. example program, but could be a real mess in a 2000 line
  272. program, especially if you missed changing one of the 12's to
  273. an 18. That would be a good example of data in and garbage
  274. out.  This program should give you a good idea of what the
  275. constant can be used for, and as you develop good programming
  276. techniques, you will use the constant declaration to your
  277. advantage.
  278.  
  279.  
  280. THE TURBO PASCAL TYPED CONSTANT
  281. ____________________________________________________________
  282.  
  283. We skipped over the second and third constant declarations for
  284. a very good reason.  They are not constant declarations. 
  285. TURBO Pascal has defined, as an extension, the "typed
  286. constant".  Using the syntax shown, Index_Start is defined as
  287. an integer type variable and is initialized to the value of
  288. 49.  This is a true variable and can be used as such in the
  289. program.  The same effect can be achieved by simply defining
  290. Index_Start as an integer type variable in the var declaration
  291. part and setting it to the value of 49 in the program itself. 
  292. Since it does not really fit the definition of a constant,
  293. it's use is discouraged until you gain experience as a Pascal
  294.  
  295.                                                      Page 6-5
  296.  
  297.                          Arrays, Types, Constants, and Labels
  298.  
  299. programmer.  Until then it will probably only be confusing to
  300. you.  In like manner, Check_It_Out is a boolean type variable
  301. initialized to the value TRUE.  It is not a constant.
  302.  
  303. The typed constants defined in the last paragraph have one
  304. additional characteristic, they are initialized only once,
  305. when the program is loaded.  Even when used in a procedure or
  306. function, they are only initialized when the program is
  307. loaded, not upon each call to the procedure or function. 
  308. Don't worry too much about this at this point, when you gain
  309. experience with Pascal, you will be able to use this
  310. information very effectively.
  311.  
  312.  
  313. THE LABEL DECLARATION
  314. ____________________________________________________________
  315.  
  316. Finally, the example program LABELS.PAS      ================
  317. will illustrate the use of labels.  In the      LABELS.PAS
  318. Pascal definition, a label is a number       ================
  319. from 0 to 9999 that is used to define a
  320. point in the program to which you wish to
  321. jump.  All labels must be defined in the label definition part
  322. of the program before they can be used.  Then a new reserved
  323. word goto is used to jump to that point in the program.  The
  324. best way to see how the goto is used with labels is to examine
  325. the program before you.  
  326.  
  327. TURBO Pascal has an extension for labels.  Any valid
  328. identifier, such as used for variables, can be used as a label
  329. in addition to the values from 0 to 9999.  These are
  330. illustrated in the example program.
  331.  
  332. When you compile and run this program, the output will look
  333. a little better than the program does.
  334.  
  335.  
  336.  
  337. THE PACKED ARRAY
  338. ____________________________________________________________
  339.  
  340. When Pascal was first defined in 1971, many of the computers
  341. in use at that time used very large words, 60 bits being a
  342. typical word size.  Memory was very expensive, so large
  343. memories were not too common.  A Pascal program that used
  344. arrays was inefficient because only one variable was stored
  345. in each word.  Most of the bits in each word were totally
  346. wasted, so the packed array was defined in which several
  347. variables were stored in each word.  This saved storage space
  348. but took extra time to unpack each word to use the data.  The
  349. programmer was given a choice of using a fast scheme that
  350. wasted memory, the array, or a slower scheme that used memory
  351. more efficiently, the packed array.
  352.  
  353.  
  354.                                                      Page 6-6
  355.  
  356.                          Arrays, Types, Constants, and Labels
  357.  
  358. The modern microcomputer has the best of both schemes, a short
  359. word, usually 16 bits, and a large memory.  The packed array
  360. is therefore not even implemented in many compilers and will
  361. be ignored during compilation.  The packed array is
  362. specifically ignored by all versions of TURBO Pascal.
  363.  
  364.  
  365. ONE MORE TURBO PASCAL EXTENSION
  366. ____________________________________________________________
  367.  
  368. Standard Pascal, as defined by Nicklaus Wirth, requires that
  369. the various fields in the definition part of the program come
  370. in a specific order and each must appear only once.  The
  371. specific order is, label, const, type, var, and finally the
  372. procedures and functions.  Of course, if any are not needed,
  373. they are simply omitted.  This is a rather rigid requirement
  374. but it was required by the pure Pascal definition probably to
  375. teach good programming techniques to beginning students.
  376.  
  377. All versions of TURBO Pascal are not nearly as rigid as the
  378. standard Pascal requirement.  You are permitted to use the
  379. fields in any order and as often as you wish provided that you
  380. define everything before you use it, which is the unbroken
  381. rule of Pascal.  It sometimes makes sense to define a few
  382. variables immediately after their types are defined to keep
  383. them near their type definitions, then define a few more types
  384. with the variables that are associated with them also.  TURBO
  385. Pascal gives you this extra flexibility that can be used to
  386. your advantage.
  387.  
  388.  
  389. PROGRAMMING EXERCISES
  390. ____________________________________________________________
  391.  
  392. 1.   Write a program to store the integers 201 to 212 in an
  393.      array then display them on the monitor.
  394.  
  395. 2.   Write a program to store a 10 by 10 array containing the
  396.      products of the indices, therefore a multiplication
  397.      table. Display the matrix on the video monitor.
  398.  
  399. 3.   Modify the program in 2 above to include a constant so
  400.      that by simply changing the constant, the size of the
  401.      matrix and the range of the table will be changed.
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.                                                      Page 6-7
  414.